package com.qfedu.lc.server.service.impl;

import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qfedu.lc.common.config.RabbitKeyConfig;
import com.qfedu.lc.common.param.MqMsg;
import com.qfedu.lc.common.vo.R;
import com.qfedu.lc.server.entity.SmsLog;
import com.qfedu.lc.server.entity.User;
import com.qfedu.lc.server.mapper.SmsLogMapper;
import com.qfedu.lc.server.mapper.UserMapper;
import com.qfedu.lc.server.service.SmsLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 3.短信发送表 服务实现类
 * </p>
 *
 * @author wgz
 * @since 2023-10-30
 */
@Service
public class SmsLogServiceImpl extends ServiceImpl<SmsLogMapper, SmsLog> implements SmsLogService {

    @Autowired
    private UserMapper userDao;

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Override
    public R sendCode(String phone) {
        //短信发送实现
        //1.验证参数 省略了手机号验证 正则表达式
        if(StrUtil.isNotEmpty(phone)){
            //2.校验数据库是否存在手机号
            QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
            userQueryWrapper.eq("phone",phone);

            // 根据查询条件查询一个
            User user=userDao.selectOne(userQueryWrapper);


            if(user==null){
                //3.手机号存在 可以登录，可以发送短信
                //采用MQ 发送
                //  new MqMsg(IdUtil.getSnowflakeNextId(), 1,phone) 就是对发送消息的封装
                rabbitTemplate.convertAndSend("",
                        RabbitKeyConfig.Q_SENDSMS,
                        new MqMsg(IdUtil.getSnowflakeNextId(), 1,phone));
                return R.ok();
            }
        }
        return R.fail("亲，请检查！！");
    }
}
